home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume18 / mush / part01 next >
Encoding:
Internet Message Format  |  1991-04-21  |  50.6 KB

  1. From: argv@zipcode.com (Dan Heller)
  2. Newsgroups: comp.sources.misc
  3. Subject: v18i058:  mush - Mail User's Shell, Part01/22
  4. Message-ID: <1991Apr21.024715.11028@sparky.IMD.Sterling.COM>
  5. Date: 21 Apr 91 02:47:15 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: c9fbc6f5 2be4af73 8a7c0cca 2498eb05
  8.  
  9. Submitted-by: Dan Heller <argv@zipcode.com>
  10. Posting-number: Volume 18, Issue 58
  11. Archive-name: mush/part01
  12. Supersedes: mush: Volume 12, Issue 28-47
  13.  
  14. This is release 7.2.2 of the Mail User's Shell (mush), a "Mail User
  15. Agent" (MUA) that is designed to manage electronic mail on most UNIX
  16. systems.  That is, mush is used by users to read mail, sort it, edit
  17. it, delete it, or use it to act as an interface to send mail to others.
  18.  
  19. -- 
  20. Dan Heller
  21. O'Reilly && Associates       Z-Code Software    Comp-sources-x:
  22. Senior Writer                President          comp-sources.x@uunet.uu.net
  23. argv@ora.com                 argv@zipcode.com
  24.  
  25. #!/bin/sh
  26. # This is a shell archive (produced by shar 3.49)
  27. # To extract the files from this archive, save it to a file, remove
  28. # everything above the "!/bin/sh" line above, and type "sh file_name".
  29. #
  30. # made 04/16/1991 21:49 UTC by kent@sparky.IMD.Sterling.COM
  31. #
  32. # existing files will NOT be overwritten unless -c is specified
  33. #
  34. # This is part 1 of a multipart archive                                    
  35. # do not concatenate these parts, unpack them in order with /bin/sh        
  36. #
  37. # This shar contains:
  38. # length  mode       name
  39. # ------ ---------- ------------------------------------------
  40. #   3198 -rw-r--r-- Gnurc
  41. #   2035 -rw-r--r-- Mailrc
  42. #   5560 -rw-r--r-- Mushrc
  43. #  28505 -rw-r--r-- README
  44. #  15679 -rw------- README-7.0
  45. #  11036 -rw-r--r-- README-7.1
  46. #   8799 -rw-r--r-- README-7.2.0
  47. #   4503 -rw-r--r-- README-7.2.2
  48. #  33326 -rw-r--r-- addrs.c
  49. #   4976 -rw-r--r-- advanced.mushrc
  50. #  20663 -rw-r--r-- bind.c
  51. #   2970 -rw-r--r-- bindings.h
  52. #  43712 -rw-r--r-- cmd_help
  53. #  13555 -rw-r--r-- command2.c
  54. #  22758 -rw-r--r-- commands.c
  55. #   1933 -rw-r--r-- compose.icon
  56. #   6407 -rw-r--r-- config.h-dist
  57. #  18325 -rw-r--r-- curs_io.c
  58. #  28914 -rw-r--r-- curses.c
  59. #  15621 -rw-r--r-- dates.c
  60. #   3468 -rwxr-xr-x digestify
  61. #  24153 -rw-r--r-- doproc.c
  62. #   4196 -rw-r--r-- execute.c
  63. #   4685 -rw-r--r-- expr.c
  64. #  14503 -rw-r--r-- file.c
  65. #   1717 -rw-r--r-- fkeys.c
  66. #  20079 -rw-r--r-- folders.c
  67. #  19617 -rw-r--r-- glob.c
  68. #   2071 -rw-r--r-- glob.h
  69. #  13462 -rw-r--r-- hdr_sw.c
  70. #  22622 -rw-r--r-- hdrs.c
  71. #  13558 -rw-r--r-- init.c
  72. #   7206 -rw-r--r-- lock.c
  73. #  34934 -rw-r--r-- loop.c
  74. #   9279 -rw-r--r-- macros.c
  75. #  57669 -rw-r--r-- mail.c
  76. #   1933 -rw-r--r-- mail.icon.1
  77. #   1933 -rw-r--r-- mail.icon.2
  78. #   8757 -rw-r--r-- main.c
  79. #   2096 -rw-r--r-- makefile.bsd
  80. #   1735 -rw-r--r-- makefile.hpux
  81. #   2454 -rw-r--r-- makefile.sun
  82. #   2023 -rw-r--r-- makefile.sys.v
  83. #   2293 -rw-r--r-- makefile.xenix
  84. #  11289 -rw------- malloc.c
  85. #  22738 -rw-r--r-- misc.c
  86. #   7659 -rw-r--r-- misc_frame.c
  87. #  28895 -rw-r--r-- msgs.c
  88. # 191116 -rw-r--r-- mush.1
  89. #  23670 -rw-r--r-- mush.h
  90. #   8816 -rw-r--r-- options.c
  91. #   1248 -rw-r--r-- options.h
  92. #  22092 -rw-r--r-- panels.c
  93. #  17697 -rw-r--r-- pick.c
  94. #   5154 -rw-r--r-- print.c
  95. #   6535 -rw-r--r-- sample.mushrc
  96. #  21221 -rw-r--r-- setopts.c
  97. #  12425 -rw-r--r-- signals.c
  98. #   8699 -rw-r--r-- sort.c
  99. #  10202 -rw-r--r-- strings.c
  100. #   1396 -rw-r--r-- strings.h
  101. #  16831 -rw-r--r-- tool.c
  102. #  18926 -rw-r--r-- tool_help
  103. #   9136 -rw-r--r-- tooledit.c
  104. #    194 -rw-r--r-- version.h
  105. #  18782 -rw-r--r-- viewopts.c
  106. #
  107. if test -r _shar_seq_.tmp; then
  108.     echo 'Must unpack archives in sequence!'
  109.     echo Please unpack part `cat _shar_seq_.tmp` next
  110.     exit 1
  111. fi
  112. # ============= Gnurc ==============
  113. if test -f 'Gnurc' -a X"$1" != X"-c"; then
  114.     echo 'x - skipping Gnurc (File already exists)'
  115.     rm -f _shar_wnt_.tmp
  116. else
  117. > _shar_wnt_.tmp
  118. echo 'x - extracting Gnurc (Text)'
  119. sed 's/^X//' << 'SHAR_EOF' > 'Gnurc' &&
  120. # .mushrc to simulate Gnu emacs (NOT Rmail!) for curses mode
  121. # -- Bart Schaefer (schaefer@cse.ogc.edu)
  122. #---------------------------------------------------------------------------
  123. # Shortcomings:
  124. #  In compose mode, can't use C-h, C-r, C-w, DEL, etc.
  125. #  Ought to delete most of the default bindings.  If you want remove the
  126. #   default bindings, you can:
  127. #    Run "mush -noinit" and do a "saveopts";
  128. #    Edit the saved file and change every "bind" to an "unbind";
  129. #    Remove all other extranous commands;
  130. #    Include the resulting list at the TOP of this file.
  131. #---------------------------------------------------------------------------
  132. #
  133. set no_reverse
  134. #
  135. # TTY setup -- you may want to customize this, because the old interrupt
  136. #  character and so on might not be reset correctly when mush exits.
  137. #
  138. cmd ntty 'stty intr ^G dsusp undef stop undef start undef lnext undef'
  139. cmd rtty 'stty intr ^C dsusp ^Y stop ^S start ^Q lnext ^V'
  140. cmd exit 'rtty; \exit'
  141. cmd xit exit
  142. cmd x exit
  143. cmd quit 'update; exit'
  144. cmd q quit
  145. cmd curses 'ntty; \curses; rtty'
  146. #
  147. # Curses mode bindings
  148. #
  149. # Exiting -- try to make sure tty gets reset
  150. bind-macro '\CX\CC' '[line-mode]exit\n'
  151. bind-macro x [no-op]
  152. bind-macro X [no-op]
  153. bind-macro q [no-op]
  154. bind-macro Q [no-op]
  155. # Files (folders)
  156. bind '\CX\CF' folder
  157. bind '\CX\CS' update
  158. bind-macro '\CXi' '[line-mode]merge '
  159. bind '\CX\CV' folder
  160. bind-macro '\CX\CW' '[save-list]*\n'
  161. # Help
  162. bind '\CX\CH' help    # Can't use just C-h, it's a prefix of the others
  163. bind-macro '\CHa' '[bind]_\n\n\CH'    # List all curses commands
  164. bind-macro '\CHc' '[line-mode]bind '    # Show one binding
  165. bind-macro '\CHf' '[line-mode]? '    # Explain line-mode function
  166. # Error Recovery -- very primitive, sorry
  167. bind '\CXu' undelete-list
  168. bind '\C_' undelete-list
  169. # Searching -- sorry, can't be incremental
  170. #  also can't repeat with same key
  171. bind '\CS' search-next
  172. bind '\CR' search-back
  173. # Motion (the important part)
  174. bind '\CB' back-msg
  175. bind '\Eb' back-msg
  176. bind '\CP' back-msg
  177. bind '\CF' next-msg
  178. bind '\Ef' next-msg
  179. bind '\CN' next-msg
  180. bind '\Ea' back-msg
  181. bind '\Ee' next-msg
  182. bind '\E[' top-page
  183. bind '\E]' bottom-page
  184. bind '\CX[' screen-back
  185. bind '\CX]' screen-next
  186. bind '\E<' first-msg
  187. bind '\E>' last-msg
  188. bind '\CV' screen-next
  189. bind '\Ev' screen-back
  190. # Killing/deleting ("forward", i.e. at cursor, only)
  191. bind '\CD' delete
  192. bind '\Ed' delete
  193. bind '\CK' delete
  194. bind '\Ek' delete
  195. bind-macro '\CW' '[line-mode]delete [getstr] | set kill\n[no-op]'
  196. bind-macro '\CY' '[undelete-list]$kill\n'
  197. # Marking -- somewhat limited because can't use C-SPC (C-@)
  198. bind-macro '\CX\CX' '[line-mode].|set mark\n[no-op]'
  199. bind-macro '\Eh' '[line-mode]h|set mark\n[no-op]'
  200. bind-macro '\CXCP' '[line-mode]h|set mark\n[no-op]'
  201. bind-macro '\CXh' '[line-mode]*|set mark\n[no-op]'
  202. # Buffers -- treated same as folders
  203. bind '\CXb' folder
  204. bind-macro '\CX\CB' '[folder]?\n\CH'    # List folders and back out
  205. bind-macro '\CXk' '[delete-list]*\n'
  206. # Shells
  207. bind-macro '\E!'\
  208. X    '[line-mode]rtty\n[shell-escape][getline][line-mode]ntty\n'
  209. bind-macro '\Ex!' '[line-mode]rtty;sh\n[line-mode]ntty\n'
  210. # Macros
  211. #  Sorry, no appending to macros, and end with <RETURN> not `C-x )'
  212. bind '\CX(' bind-macro
  213. #
  214. # Lastly, actually reset the tty
  215. #
  216. if iscurses
  217. X    ntty
  218. endif
  219. SHAR_EOF
  220. chmod 0644 Gnurc ||
  221. echo 'restore of Gnurc failed'
  222. Wc_c="`wc -c < 'Gnurc'`"
  223. test 3198 -eq "$Wc_c" ||
  224.     echo 'Gnurc: original size 3198, current size' "$Wc_c"
  225. rm -f _shar_wnt_.tmp
  226. fi
  227. # ============= Mailrc ==============
  228. if test -f 'Mailrc' -a X"$1" != X"-c"; then
  229.     echo 'x - skipping Mailrc (File already exists)'
  230.     rm -f _shar_wnt_.tmp
  231. else
  232. > _shar_wnt_.tmp
  233. echo 'x - extracting Mailrc (Text)'
  234. sed 's/^X//' << 'SHAR_EOF' > 'Mailrc' &&
  235. # .mushrc to cause Mush to emulate UCB Mail
  236. # -- Bart Schaefer (schaefer@cse.ogi.edu)
  237. #
  238. # This file can be used as either the DEFAULT_RC or the ALT_DEF_RC (see
  239. #  config.h) but such use is NOT recommended.  Instead, you should modify
  240. #  one of those files to "source" this file.
  241. #
  242. #----------------------------------------------------------------------------
  243. # Shortcomings:
  244. #  Mush does not support the "noisy phone line" flags of Mail
  245. #   (-i command line option or "set ignore" to ignore RUBOUT characters)
  246. #  Mush will never remove a system mailbox (no "unset keep" equivalent)
  247. #  See comments below on (lack of) command prefix recognition
  248. #----------------------------------------------------------------------------
  249. #
  250. # Set up prompting, headers
  251. #
  252. set prompt='& '
  253. set mil_time date_received
  254. set hdr_format='%8.80a %D %M %-2N %5T  %l/%c "%.29s"'
  255. #
  256. # Set up mailing/replying miscellaneous
  257. #
  258. set indent_str = "    "
  259. set reply_to_hdr auto_route
  260. #
  261. # Set up command interface
  262. #  Note that a full emulation is difficult, because Mush does not support
  263. #  command prefix recognition (e.g., Mail interprets "Rep" as "Reply").
  264. #
  265. # Don't barf if history doesn't work, but still do cmd expansion
  266. #
  267. set nonobang
  268. #
  269. # This stuff is fine, but really needs prefix recognition.
  270. #
  271. cmd Reply replysender
  272. cmd R replysender
  273. cmd alt alternates
  274. cmd chdir cd
  275. cmd chd cd
  276. cmd + next
  277. cmd ch cd
  278. cmd c copy
  279. cmd file folder
  280. cmd fi folder
  281. cmd hold preserve
  282. cmd ho hold
  283. cmd reply replyall
  284. cmd r replyall
  285. cmd retain "set show_hdrs='\!*'"    # Not quite right, but ...
  286. cmd se set
  287. cmd shell sh
  288. cmd so source
  289. cmd u 'u \!* | pick -1 | from -' # "u" changes current message in Mail
  290. cmd un u
  291. cmd undelete u
  292. cmd unread 'flags \!* +U'    # "unread" is undocumented in Mail
  293. cmd uns unset
  294. cmd vi v
  295. cmd z 'z \!* + | from -'    # "z" changes current message in Mail
  296. cmd z+ z
  297. cmd z- 'z \!* -'
  298. #
  299. # You may want this file sourced, especially if you are not using the
  300. #  supplied Mushrc file as your DEFAULT_RC.
  301. #
  302. # set ALT_DEF_RC = "/usr/lib/Mail.rc"
  303. # source $ALT_DEF_RC
  304. # unset ALT_DEF_RC
  305. SHAR_EOF
  306. chmod 0644 Mailrc ||
  307. echo 'restore of Mailrc failed'
  308. Wc_c="`wc -c < 'Mailrc'`"
  309. test 2035 -eq "$Wc_c" ||
  310.     echo 'Mailrc: original size 2035, current size' "$Wc_c"
  311. rm -f _shar_wnt_.tmp
  312. fi
  313. # ============= Mushrc ==============
  314. if test -f 'Mushrc' -a X"$1" != X"-c"; then
  315.     echo 'x - skipping Mushrc (File already exists)'
  316.     rm -f _shar_wnt_.tmp
  317. else
  318. > _shar_wnt_.tmp
  319. echo 'x - extracting Mushrc (Text)'
  320. sed 's/^X//' << 'SHAR_EOF' > 'Mushrc' &&
  321. # Mushrc -- suggested /usr/lib/Mushrc init file for Mush
  322. # Copyright (c) 1989 by Bart Schaefer and Dan Heller
  323. #
  324. # Set these variables as they are set in config.h
  325. # (assumes that this file is DEFAULT_RC from config.h)
  326. set \
  327. X    MAILRC =    ".mushrc" \
  328. X    ALTERNATE_RC =    ".mailrc" \
  329. X    ALT_DEF_RC =    "/usr/lib/Mail.rc"
  330. X
  331. # Set up the display early to allow quick exit in headers-only mode.
  332. # The hdrs_only flag is true if the command line was: "mush -H".
  333. # The variable hdr_format is set to change the format of the header
  334. # summaries that are displayed.
  335. if hdrs_only
  336. X    set hdr_format='%22a %M %-2N %5T  %.33s'
  337. X    exit    # Quits reading this file
  338. else
  339. X    set hdr_format='%22a %M %-2N %5T (%3.5l li) %.25s'
  340. endif
  341. X
  342. # Set the prompt to show current time, name of the current folder,
  343. # current message number, and count of total messages.
  344. set prompt="(%T) %f: #%m of %t> "
  345. X
  346. # Hitting <CR> should do nothing (helps make mush more shell-like).  If
  347. # newline is not set, hitting <CR> prints the next message (like Mail).
  348. # This variable could be set to any mush command.
  349. set newline
  350. X
  351. # When reading messages, don't bother looking at lengthy, boring headers.
  352. ignore message-id received via status priority
  353. X
  354. # Since mush has csh-like history, you might find it annoying to type
  355. # things like "mail host\!host1\!host2\!user" from within the mush shell.
  356. # Setting nonobang will prevent the "unknown event" and allow the !'s to
  357. # be typed without having to be preceded by backslashes.
  358. set nonobang
  359. X
  360. # By default, mush's history is set to the last command only.  Set it to
  361. # remember the last 100 commands.
  362. set history = 100
  363. X
  364. # If the variable "unix" is set, then any command that isn't a mush command
  365. # will execute the command as if you typed it from the shell.  Note, such
  366. # commands will not go through another shell -- this is it.  This may be
  367. # considered confusing for new users, so it is commented out by default.
  368. # set unix
  369. X
  370. # When you use the -i option to reply, or use the ~i tilde escape in a letter
  371. # when in compose mode, the current message will be included in your text.
  372. # Put a nice wrapper around those included messages.  Here, show the author's
  373. # name and the subject of his letter, label the end, and add a trailing blank
  374. # to separate each inclusion and make finding the end easier.
  375. set pre_indent_str='On %M %N, %T, %.50n wrote:\n} Subject: %.65s'
  376. set indent_str='} '    # actual message text is preceded by a "}"
  377. set post_indent_str='}-- End of excerpt from %.50n\n'
  378. X
  379. # Label replies with a header showing the who, what, and when of the
  380. # message being replied-to.
  381. set in_reply_to='%f\n\t"%s" (%d)'
  382. X
  383. # Mail routing and address-fixing conveniences.  If auto_route is set, then
  384. # replies to messages take a closer look at the addresses of the recipients.
  385. # If any redundant paths are present, they are pruned.  Also, the path that
  386. # precedes any hosts listed in the "known_hosts" list is truncated.  This is
  387. # useful for uucp sites only, and is therefore commented out by default.
  388. # set auto_route known_hosts="sun ucbcad well unicom"
  389. X
  390. # The curses mode allows the screen to be set up like a full screen editor.
  391. # There are basic "curses commands" which are bound to keyboard key-sequences
  392. # (usually one character).  The user can rebind these keys to suit his tastes.
  393. # Note that the binding for R below removes the binding of reply-all.
  394. #
  395. set curses_help        # Unset this to remove help message in curses.
  396. bind \n display        # Hit return to display the next message.
  397. bind e macro "[line-mode]edit\n"    # Quick edit from curses.
  398. bind P macro "[line-mode]Print\n"    # Show me all the headers.
  399. X
  400. # "cmd" is used to set command line aliases similar to the way "csh"
  401. # does it.  The only difference is that "alias" is a reserved word in
  402. # Mush and Mail, so cmd is used.
  403. #
  404. cmd dq 'd \!*; q'        # Delete a message list, then quit.
  405. cmd unread 'flags \!* U O'    # Mark messages unread.
  406. cmd : curses            # Colon now "toggles" curses mode.
  407. X
  408. # Read the alternate system init file in addition to this file
  409. source $ALT_DEF_RC
  410. unset ALT_DEF_RC
  411. X
  412. # Mush tries to read ~/.mushrc first, then it tries ~/.mailrc.  If .mushrc
  413. # is found, .mailrc is normally not read.  Source the contents of .mailrc
  414. # as well in case there are Mail aliases that are set there.
  415. if -e $HOME/$MAILRC
  416. X    if -e $HOME/$ALTERNATE_RC
  417. X    source $HOME/$ALTERNATE_RC
  418. X    endif
  419. endif
  420. unset ALTERNATE_RC
  421. X
  422. # The rest of this file demonstrates how sysadmins with novice users
  423. # might want to set things up.
  424. X
  425. if -e $HOME/.mushexpert
  426. X    set quiet
  427. X    exit
  428. endif
  429. if ! -e $HOME/.mushuser
  430. X    echo "I see you've never used the Mush program before."
  431. X    echo "I'll set some special flags to help you out."
  432. X    echo "After you've used Mush a few times, you can type the command:"
  433. X    echo ""
  434. X    echo "    expert"
  435. X    echo ""
  436. X    echo "and the flags will no longer be set unless you put them"
  437. X    echo "in your $HOME/$MAILRC file."
  438. X    echo ""
  439. X    sh touch $HOME/.mushuser    # Use sh in case $unix is not set.
  440. X    if $?quiet
  441. X    unset quiet        # Show the help message on startup.
  442. X    endif
  443. endif
  444. # At this point some helpful variables should be set.  See the list above,
  445. # marked as "helpful for new users", for suggestions.
  446. #
  447. # Create the "expert" command mentioned in the message above.
  448. cmd expert 'sh touch $HOME/.mushexpert'
  449. X
  450. # These variables are helpful for new users:
  451. #    ask        -- always prompt for Subject: of mail
  452. #    ignoreeof    -- ignore end-of-file from keyboard
  453. #    verify        -- query that all is well before sending mail
  454. #    warning        -- report miscellaneous possible problems
  455. set ask verify warning
  456. set ignoreeof="echo 'Use "'"'quit'"'" to quit.'"
  457. SHAR_EOF
  458. chmod 0644 Mushrc ||
  459. echo 'restore of Mushrc failed'
  460. Wc_c="`wc -c < 'Mushrc'`"
  461. test 5560 -eq "$Wc_c" ||
  462.     echo 'Mushrc: original size 5560, current size' "$Wc_c"
  463. rm -f _shar_wnt_.tmp
  464. fi
  465. # ============= README ==============
  466. if test -f 'README' -a X"$1" != X"-c"; then
  467.     echo 'x - skipping README (File already exists)'
  468.     rm -f _shar_wnt_.tmp
  469. else
  470. > _shar_wnt_.tmp
  471. echo 'x - extracting README (Text)'
  472. sed 's/^X//' << 'SHAR_EOF' > 'README' &&
  473. /* @(#)README        (c) copyright 9/15/89    (Dan Heller) */
  474. X
  475. Author:
  476. X    Dan Heller
  477. X
  478. Network addresses:
  479. X    argv@sun.com        argv@monet.berkeley.edu.
  480. X    argv@garp.mit.edu        dheller@ucbcory.berkeley.edu
  481. X
  482. When sending mail, mail to the addresses in the order given.
  483. X
  484. Contained is the source for "Mail User's Shell" (MUSH), a "Mail User
  485. Agent" (MUA) that is designed to manage electronic mail on most UNIX
  486. systems.  That is, mush is used by users to read mail, sort it, edit
  487. it, delete it, or use it to act as an interface to send mail to others.
  488. A Mail Transport Agent (MTA) is the program which mush communicates with
  489. that actually -delivers- mail.
  490. X
  491. Mush is copyright (c) 1986, 1987, 1988, 1989, 1990, 1991 by Dan Heller.
  492. All Rights Reserved.   This software is not in the public domain.
  493. X
  494. Redistribution of the unmodified source code is permitted as long as all
  495. copyright notices remain intact and all other identifying notices remain
  496. in the code and in the binary.  This includes message headers on outgoing
  497. mail and the startup message.  Future releases may extract the release
  498. version from the message headers of mush-originated messages to aid in
  499. implementing features and providing backwards compatibility with previous
  500. versions.  Modification of the source for personal use is permitted.
  501. Modifications sent to the authors are humbly accepted and it is their
  502. perogative to make the mods official.  Only the "official" sources may be
  503. redistributed and no sale of the code or any part thereof is permitted
  504. without written consent from the authors.  Further, no part of the code
  505. may be used in any other product, free or otherwise, without consent from
  506. the authors.
  507. X
  508. With that out of the way...
  509. X
  510. Mush runs on various flavors of unix.  To build mush, you should identify
  511. which unix you are running:
  512. X
  513. X    Sun (all versions from 3.5 and higher).
  514. X    BSD (versions 4.2 and up, or SunOS earlier than 3.5)
  515. X    System-V / Version 7 / System III (Bell Labs)
  516. X    Xenix (this might be tricky)
  517. X
  518. You will need to copy "config.h-dist" to config.h and edit it to reflect
  519. the system dependencies described there.  These consist of "compile-time
  520. definitions and macros."
  521. X
  522. When it comes to "compile-time definitions", you may use one of two methods:
  523. X
  524. X    #define DEFINITION    /* in the config.h file */
  525. X    -DDEFINITION    /* in your makefile */
  526. X
  527. If the definition is of the form MACRO="string", then use:
  528. X
  529. X    #define MACRO string
  530. X    -DMACRO=string
  531. X
  532. Note that if you use definitions in the makefile, you should remove the
  533. corresponding definitions from config.h -- if you do not, the config.h
  534. definitions will override the -D definitions.  The compiler will usually
  535. print a warning message if this happens, but the result will still be wrong.
  536. X
  537. ---------------
  538. Which makefile to use:
  539. X
  540. If you are on a Sun Workstation:
  541. X
  542. X    makefile.sun applies only to suns and creates a binary called "mush."
  543. X    If the binary ends in "tool", then the graphics (suntools) mode will be
  544. X    used by default on invocation.  Otherwise, you must specify -t for
  545. X    toolmode on sun workstations.  The SUNTOOL define is used in the
  546. X    makefile.sun in order to compile the suntools version.  You DO need
  547. X    to be running SunView; old SunWindows (2.0+) no longer works.  Be sure
  548. X    to follow the notes in the makefile.sun for SunOS-4.0 machines.
  549. X
  550. X    If you know that you're not going to use the suntools mode then you
  551. X    should use makefile.bsd so that SUNTOOL won't be defined and unnecessary
  552. X    files will not be compiled so the binary will be smaller.
  553. X
  554. X    Whether or not you define SUNTOOL, you should define one of SUN_3_5,
  555. X    SUN_4_0, or SUN_4_1 depending on your SunOS version.  If SUNTOOL is
  556. X    the only thing defined, SUN_4_1 will be used.  If your version of
  557. X    SunOS is older than 3.5, you can't use SUNTOOL, so go to makefile.bsd.
  558. X
  559. X    You may also choose to define NO_WALK_MENUS to disable walking menus
  560. X    for file names selectable from the "folder" and "save" command items.
  561. X
  562. If you are on a BSD UNIX machine:
  563. X
  564. X    You should use the makefile.bsd makefile.
  565. X
  566. If you are using XENIX:
  567. X
  568. X    There is one makefile for xenix: makefile.xenix.  However, SCO-xenix
  569. X    runs on either 80286 or 80386 architectures.  This makefile has been
  570. X    tuned for SCO's version of xenix.  This does not mean that it won't
  571. X    work under other xenix versions -- however, some changes may have to
  572. X    be made by hand.  If your xenix release is sco-xenix 2.2 or higher
  573. X    then you must define USG. The libraries to use may be -ltinfo instead
  574. X    of -lcurses -ltermlib.  This is because the curses package may use
  575. X    termio instead of the sgtty data structure.  If you want to use termio
  576. X    anyway, even if you're on an older xenix system (that supports termio),
  577. X    then you may define USG anyway.
  578. X
  579. X    Follow the hints in the makefile.xenix for compiling for 286 systems
  580. X    or 386 systems.  It is *very likely* that the CFLAGS will have to be
  581. X    modified -- specifically, the model size and the stack size options.
  582. X    You should be very familiar with your xenix to know how to tune this
  583. X    properly.
  584. X
  585. If you are on a System-V Bell labs machine:
  586. X
  587. X    makefile.sys.v is for unix machines that are not running any flavor of
  588. X    BSD and probably running a system-v flavor of unix -- this defines USG
  589. X    so that termio will be used.
  590. X
  591. X    SCO UNIX V.2.0 users should add -lx to OTHERLIBS in makefile.sys.v.
  592. X    It may also be desirable to change MANDIR to /usr/man/man.C and
  593. X    MANEXT to C in the makefile.  SCO UNIX V.3.2 users should avoid -lx
  594. X    like the plague, and should define DIRECTORY and SELECT instead.
  595. X
  596. X    MicroPort sys-v users should probably remove the -O compiler option
  597. X    from the makefile, and may have trouble with the msg_bit() macro
  598. X    defined in mush.h.  It should be fairly trivial to generate an
  599. X    equivalent function.
  600. X
  601. If you are using Ultrix:
  602. X
  603. X    Start with makefile.bsd.
  604. X
  605. X    For Ultrix 2.2, change LIBES in makefile.bsd from
  606. X    LIBES= -lcurses -ltermlib
  607. X    to 
  608. X    LIBES= -lcurses -ltermcap
  609. X
  610. X    For Ultrix V3.0, use the standard makefile.bsd LIBES, but add
  611. X    -DSIGRET=void
  612. X    to the CFLAGS, or add
  613. X    #define SIGRET void
  614. X    to config.h (see discussion below).
  615. X
  616. If you are using HP-UX:
  617. X
  618. X    Use makefile.hpux.
  619. X
  620. X    Versions 6.5 and 7.0 of HP-UX (not to be confused with the same
  621. X    version numbers of Mush) have the Berkeley-style directory access
  622. X    libraries.  Those using older versions should omit -DDIRECTORY
  623. X    from the CFLAGS.  This will cause the portable directory access
  624. X    routines in that file to be compiled.
  625. X
  626. If you are using Apple A/UX:
  627. X
  628. X    Use makefile.sys.v, and add -DAUX -DDIRECTORY to CFLAGS.
  629. X
  630. X    Mush uses 4.2-BSD compatible signal handling when AUX is defined.
  631. X
  632. If you are using a hybrid BSD/SysV system:
  633. X
  634. X    You may have to use a combination of many of the defines listed
  635. X    throughout this file.  You may also have to add additional libraries
  636. X    to the LIBS= in the appropriate makefile.  For example, to use the
  637. X    bsd system calls such as select(), getwd(), the directory reading
  638. X    routines ...  you may have to define additional parameters such as
  639. X    -DSELECT, -DGETWD, -DDIRECTORY, ... and possibly add -lbsd.
  640. X
  641. Notes for some hybrid systems:
  642. X    SGI workstations:
  643. X    Silicon Graphics Iris workstations should add -DDIRECTORY to prevent
  644. X    the portable directory routines from being compiled in.
  645. X
  646. X    You may optionally add -DSELECT if you want to use the BSD style
  647. X    select() function.  If you do this, you must also add -lbsd to the
  648. X    LIBS macro definition in the Makefile.
  649. X    You will also need to #include <sys/times.h> in curs_io.c.
  650. X
  651. X    MIPS workstations:
  652. X    These are also hybrid systems that may require additional hand-
  653. X    configuration in order to work properly.  There seem to be
  654. X    major differences between the last several releases, so your
  655. X    milage may vary.  Currently, lock.c should be compiled with BSD
  656. X    defined, but everything else should be SYSV.  -DGETWD should be
  657. X    used and -lbsd may have to be added to LIBS in the Makefile.
  658. X
  659. When you decide on an appropriate makefile, _copy_ it to a new file called
  660. Makefile _before_ making any of local changes.  Please read the following
  661. sections for addtional configuration information.  In addition to changing
  662. compilation options as appropriate, you should examine the rules for the
  663. "install:" target.  Running "make" will NOT use this target by default;
  664. it is provided for your convenience only.
  665. ---------------
  666. X
  667. Your Mail Transport Agent:
  668. Sendmail:
  669. X    Mush was originally designed to use sendmail as the Mail Transport Agent.
  670. X    However, other MTA's will work.  The MTA you use should be defined in
  671. X    config.h under the MAIL_DELIVERY macro define. By default,
  672. X        /usr/lib/sendmail -i
  673. X    is used -- the option, -i, tells sendmail not to accept "." on a line
  674. X    by itself as an end-of-file marker.  This has been obsleted by "-oi",
  675. X    but "-i" still works and is backwards compatible with older sendmails.
  676. X
  677. Delivermail:
  678. X    Some mailers such as delivermail and MMDF use special strings to separate
  679. X    messages stored in a folder.  Older delivermail versions would use "^C".
  680. X    Whatever your system uses, if it is NOT "From " (just the first 5 chars
  681. X    on a line matching "From "), then this string should be defined in
  682. X    config.h with the MSG_SEPARATOR macro.
  683. X
  684. MMDF:
  685. X    NOTE: MMDF sites can define MMDF and not worry about MSG_SEPARATOR.  See
  686. X    config.h-dist if you run MMDF.
  687. X
  688. X    Since MMDF can deliver users' mail in their home directories, there is
  689. X    a define to specify this option: -DHOMEMAIL
  690. X
  691. X    Since MMDF uses its own libraries to do file locking, you should add the
  692. X    appropriate library to the LIBS list in your makefile.
  693. X
  694. X    MMDF sites should probably NOT define PICKY_MAILER (see below).
  695. X
  696. All others:
  697. X    Chances are, your MTA uses the "From " format to separate messges in
  698. X    a folder.  This includes, /bin/mail, rmail, smail, execmail, and so on.
  699. X    Unless you *know* otherwise, assume this to be the case with your MTA.
  700. X
  701. X    If no MSG_SEPARATOR is specified, what mush looks for is a pattern of
  702. X    From <string> <date format>
  703. X    The "string" is usually the return address of the sender and the date
  704. X    format is supposed to be in ctime(3) format.  Even still, some MTAs
  705. X    don't conform completely to this standard and vary slightly in
  706. X    implementation.  The function load_folder() (which reads in messages)
  707. X    contains a scanf which looks for this format to verify that this is
  708. X    indeed a new message being scanned.  If you install mush and find that
  709. X    you are entering a shell, but mush indicates there are no messages in
  710. X    the folder, it could be that you have a weird "From " line format and
  711. X    the scanf() call needs to be either modified or removed.
  712. X
  713. X    Machines that use mail transfer agents that *do not* use a colon-less
  714. X    "From " line as a message separator should #define in config.h the string
  715. X    MSG_SEPARATOR.  Since this string is usually control characters, you
  716. X    need to specify actual ascii values for those characters.  Users of MMDF,
  717. X    for example, may use "\001\001\001\001" since some mmdf versions use four
  718. X    control-A's to separate messages.  This message separator assumes that
  719. X    there is a carriage return at the end of the string.  Systems that use
  720. X    sendmail need not concern themselves with this define.  MSG_SEPARATOR
  721. X    should not contain a newline, except for MMDF.  The MSG_SEPARATOR must
  722. X    match a complete line; a prefix will not work.
  723. X
  724. #defines specifically for your MTA:
  725. X
  726. MSG_SEPARATOR
  727. X    See the discussion above.
  728. X
  729. UUCP
  730. X    This should be defined if your MTA does not automatically create a
  731. X    From: header *and* your machine talks to other computers via uucp.
  732. X    If defined, the From: line created specifies the user's address in
  733. X    UUCP format (host!user).  Otherwise, arpa format is used (user@host).
  734. X    Also, return addresses generated from RFC822 route specs will be put
  735. X    in UUCP format with a complete path.
  736. X
  737. MTA_EXIT
  738. X    The exit code of a successful delivery of a message by your MTA.
  739. X    This is typically 0, but MMDF sites should define 9 (see config.h-dist).
  740. X
  741. NO_COMMAS
  742. X    If your mailer does *NOT* like commas between addresses (smail sites,
  743. X    xenix and sys-v machines), then you should define NO_COMMAS.  Otherwise,
  744. X    you will get mailer-daemon [type] messages back when trying to send mail
  745. X    to multiple users.  Sendmail should not normally need this, but early
  746. X    versions of SunOS 4.1 were shipped with a broken sendmail configuration
  747. X    and require NO_COMMAS anyway.
  748. X
  749. VERBOSE_ARG
  750. X    If your mailer does NOT have a verbose option, then you should not have
  751. X    VERBOSE_ARG defined.  Otherwise, define it to be whatever the verbose
  752. X    argument is for your mailer.  The default is -v.
  753. X
  754. METOO
  755. X    Sendmail uses the -m argument to say, "metoo" -- when sending to sendmail
  756. X    aliases (e.g. mailing lists), sendmail will expand the alias, but if your
  757. X    address appears in the expansion, you are excluded from getting your own
  758. X    mail.  However, if you have the variable metoo set with your variables,
  759. X    then the METOO argument is passed to sendmail to say, "I know I'm on this
  760. X    mailing list, but send me a copy of my message even tho I sent it."  For
  761. X    sendmail, this is -m.  If your mailer uses something else, then define
  762. X    METOO_ARG in the config.h file.  If you don't have it (sys-v), then this
  763. X    should not be defined.
  764. X
  765. PICKY_MAILER
  766. X    Most RFC822 compliant mailers (sendmail) will add the headers From:
  767. X    and Date: on outgoing mail.  If the user or UA sends these headers,
  768. X    most MTAs will not append them automatically.  However, there are
  769. X    certain MTAs which will not allow this -- these "picky mailers" will
  770. X    precede such headers with a '>' and make the headers very ugly and
  771. X    somewhat redundant or contradictory.  It's hard to determine whether
  772. X    or not your MTA will do this without actually sending mail to yourself.
  773. X    However, it is advised to set this *unless* your mailer is not RFC822-
  774. X    compliant (used to be defined by OLD_MAILER in previous mush releases).
  775. X
  776. X    PICKY_MAILER should NOT normally be defined when MMDF is defined.
  777. X
  778. DOT_LOCK
  779. X    Different systems use different locking mechanisms.  By default,
  780. X    mush uses one of flock(), locking(), or lockf() (depending on your
  781. X    system).  Some  systems use a file called the same name as the file
  782. X    you're locking with an appended ".lock" at the end (some Xenix's use
  783. X    /tmp/$USER.mlk).  If you define DOT_LOCK, mush will first check for the
  784. X    .lock file.  If it exists, mush loops until it goes away and then mush
  785. X    creates it mode 600.  Regardless of whether you use dot-locking, mush
  786. X    will continue to try to use flock(), or whatever.
  787. X
  788. X    Dot-locking requires mush to have write access to the directory where
  789. X    your mailbox exists.  Normally, this directory isn't writable by the
  790. X    average user, so to do this you may have to sgid mush to the group id
  791. X    of the owner of that directory.  Mush will get the effective gid at the
  792. X    beginning of the program and immediately reset it to your real gid until
  793. X    the time it needs to lock the file occurs.  It changes back to the sgid,
  794. X    locks, then returns to normal.  There shouldn't be a security problem.
  795. X
  796. X    If you don't know what any of this means, ignore DOT_LOCK.
  797. X
  798. X    Another warning is that some MTA's don't even follow their own protocol.
  799. X    System V, it has been reported, creates the .lock file without checking
  800. X    to see if it exists (therefore ruining someone else's lock).
  801. X
  802. ---------------
  803. Signals:
  804. X
  805. SIGRET
  806. X    When signals occur in unix, the program can identify a function to be
  807. X    called whenever a specific signal interrupts the process.  That function
  808. X    returns one of two types in unix: int and void.  Because the return value
  809. X    of this function is always ignored, many unix systems are converting
  810. X    their definition of this function from int to void.  Mush has a define:
  811. X    SIGRET which defines what the function should return.
  812. X
  813. X    By default, SIGRET is defined to be "int", except for SunOS4.0, where
  814. X    it is defined to be "void".
  815. X
  816. X    Some System-V, some Ultrix and some Xenix machines should also define
  817. X    SIGRET to be void.  If you don't know, leave it alone.  If you guess
  818. X    wrong, you will get compiler "warnings" on lines that read:
  819. X    on_intr();
  820. X    off_intr();
  821. ---------------
  822. Memory allocation:
  823. X
  824. INTERNAL_MALLOC
  825. X    Mush depends on the xfree() function to detect invalid pointers, so
  826. X    that they will not be incorrectly passed to free().  Some system
  827. X    organizations make this very difficult, if not impossible.  80286-based
  828. X    machines in certain memory models, AT&T 3b2s and 3b15s, and others have
  829. X    these difficulties; VAX, Sun, Sequent, Apollo, and most 680x0 and many
  830. X    80386-based machines do not.  Changes have been made to xfree() to
  831. X    handle the AT&T machines, but if you aren't sure about your machine,
  832. X    or if you get unexpected segmentation faults, define INTERNAL_MALLOC.
  833. X    SysV users may want to define this anyway, because the internal malloc
  834. X    may be faster than the default malloc(3).
  835. X
  836. X    By default, INTERNAL_MALLOC is undefined.
  837. X
  838. ---------------
  839. Miscellaneous defines:
  840. X
  841. TIMEZONE
  842. X    If this is defined, the string it is defined to is used as your timezone
  843. X    regardless of what the system thinks your timezone is.  This is intended
  844. X    for systems which have no functions for determining the timezone.  On
  845. X    newer Gould BSD 4.3 systems, it is safe to use
  846. X        #define TIMEZONE T->tm_zone
  847. X    On other systems, it is better to define TIMEZONE as a string, e.g.
  848. X        #define TIMEZONE "PST"    /* Or "-0800" for international */
  849. X
  850. DAYLITETZ
  851. X    This should be defined to your Daylight Savings Time timezone string if
  852. X    and only if you also define TIMEZONE (above).  Do not define this if you
  853. X    use the Gould tm_zone.
  854. X
  855. USA
  856. X    If you are in the United States of America or nearby parts of North
  857. X    America and you want your timezones to be generated as three-letter
  858. X    acronyms (EST, CDT, etc.) you can define USA.  Otherwise, generated
  859. X    timezones will be expressed as offsets from Universal Time (GMT).
  860. X    It is recommended that you avoid defining USA.  Mush will do its best
  861. X    to comprehend TLA timezones on incoming mail, regardless of USA.
  862. X
  863. VPRINTF
  864. X    This should be defined if your system has the vprintf functions. You
  865. X    *have* these functions if you are running:
  866. X    o system V
  867. X    o xenix
  868. X    o Sun release 3.0 or higher.
  869. X    o BSD 4.3-tahoe, 4.3-reno, or 4.4.
  870. X    If you are still not sure, try the following command from your shell:
  871. X
  872. X    % ar t /lib/libc.a | grep 'v.*printf'
  873. X
  874. X    If you have it, you'll probably get something like
  875. X    vprintf.o
  876. X    vsprintf.o
  877. X    as output.  If you don't have it, you won't have any output.  If your
  878. X    main C-libraries are not in /lib/libc.a, then find where they are and
  879. X    try the same command using that file.  BSD machines before 4.3-tahoe
  880. X    do not have vprintf().
  881. X
  882. GETWD
  883. X    This should be defined if your system uses the getwd() system call, as
  884. X    opposed to getcwd(), and your system is not a BSD system (e.g. MIPS).
  885. X
  886. ---------------
  887. The sprintf() function:
  888. X    If you *know* your system's sprintf returns a char *, you can remove the
  889. X    #define sprintf Sprintf
  890. X    in strings.h.  Careful, not all BSD4.3 machines are alike!  If you don't
  891. X    know for sure, don't change this define.
  892. X
  893. ---------------
  894. Regular expression defines:
  895. X    Some systems have regcmp/regex as their regular expression matching
  896. X    routines while others have re_comp/re_exec -- If you have regcmp,
  897. X    you should define REGCMP so that you will use the routines regcmp()
  898. X    and regex() as the regular expression composer/parser.  REGCMP should
  899. X    normally be defined for xenix and System-V Unix.  If you don't have
  900. X    REGCMP defined, then the routines re_comp() and re_exec() are used
  901. X    (this is the default for mush).
  902. X
  903. X    Note that some systems do not have either set of routines in the default
  904. X    libraries.  You must find the library to use and add it to the list of
  905. X    libraries to use.  If this is the case, your link will fail with the
  906. X    errors that regex and re_comp are undefined functions.  Read your man
  907. X    page for regex(3) to find where to locate those libraries.
  908. X
  909. ---------------
  910. The Berkeley directory(3) routines:
  911. X    If your system has directory access routines compatible with BSD Unix
  912. X    (opendir, readdir, closedir) you should define DIRECTORY in either the
  913. X    makefile or config.h.  This is already reflected in the makefile.hpux.
  914. X    See the notes above for other Sys-V-ish systems that may require this.
  915. X    If DIRECTORY is not defined, replacement routines in glob.c are used.
  916. X
  917. ---------------
  918. The select() function call:
  919. X    Mush uses select() to implement macros, mappings and bindings.  If your
  920. X    system is a BSD system, then this is defined for you.  However, with the
  921. X    advent of hybrid bsd/sys-v systems, you may not be able to set BSD, but
  922. X    you know you still have select() --for such systems, define SELECT in
  923. X    your makefile or in config.h.  For example, SGI systems require this.
  924. X
  925. X    Newer xenix machines have this as so some system-v machines.  If you don't
  926. X    define one of BSD or SELECT, mush will use another function although not
  927. X    as optimal as select().
  928. X
  929. ---------------
  930. The default Mushrc startup file:
  931. X    A default mushrc should be installed, containing local configuration
  932. X    information (aliases or variable settings).  This can also provide
  933. X    first-time users with a more friendly interface.  UCB mail's default
  934. X    Mail.rc works, but no default file works also.  The location of the
  935. X    default file should be defined in config.h.  To have no default Mushrc,
  936. X    set the default to /dev/null.
  937. X
  938. X    The Mushrc file supplied with the mush distribution is heavily commented
  939. X    and uses several of mush's features in setting up the interface.  THIS
  940. X    FILE IS NOT INTENDED TO BE USED WITHOUT LOCAL MODIFICATIONS!  If you
  941. X    use this file, you should modify it so settings of the variables MAILRC,
  942. X    ALTERNATE_RC, and ALT_DEF_RC correspond to the definitions in your
  943. X    config.h file.  You should also examine and possibly delete the help
  944. X    section for new users (creates the .mushuser/.mushexpert files), which is
  945. X    included mainly as an example.  The Mushrc is designed to source the
  946. X    ALT_DEF_RC, which is usually equivalent to the UCB mail Mail.rc.  This
  947. X    eases the transition to mush for UCB sites, and allows aliases and
  948. X    settings that should apply to both mush and mail to reside in a single
  949. X    file.  UUCP sites may also want to uncomment the line which sets the
  950. X    auto_route and known_hosts variables; be sure to modify known_hosts to be
  951. X    an accurate list of your UUCP mail neighbors.
  952. X
  953. X    Important Note to sys-v'ers who can't get their hostname from utsname(2)
  954. X    (xenix, more?), the hostname should probably be set in the default Mushrc
  955. X    defined in config.h.    set hostname=whatever
  956. X
  957. X    If your system has a LAN or UUCP name returned by gethostname(3) and
  958. X    an additional network mail (domain) name, you probably want to add the
  959. X    domain name to the value of hostname.   set hostname="domain $hostname"
  960. X    (where "domain" is your local domain name).  Sometimes, the domain name
  961. X    is listed among the alternate names for the machine, which mush is able
  962. X    to look up, but will not be the first name mush finds.  Since mush uses
  963. X    the first name listed in $hostname when constructing From: lines and
  964. X    the like, you may need to use a "set" in Mushrc to rearrange the list.
  965. X
  966. X    For sun systems, the sun Mail Mailrc (/usr/lib/Mailrc) does not work
  967. X    very well because sun's Mail is not standard /usr/ucb/Mail.  For this
  968. X    reason, sun for many years did not change the default Mail.rc, which
  969. X    still resides in /usr/lib/Mail.rc (note this has the "." whereas the
  970. X    other file does not).  The default config.h-dist reflects this.  In
  971. X    recent versions of SunOS, things like "if t" and "set |=" have begun
  972. X    to creep into Mail.rc, which may cause mush to behave oddly.  Avoid
  973. X    sourcing $ALT_DEF_RC in Mushrc if this is the case, and consider
  974. X    changing the definition of ALT_DEF_RC in config.h.
  975. X
  976. X    There is a supplied Mailrc file with mush, but this is only intended to
  977. X    be used as an example of how to make mush look like ucbMail.  This is a
  978. X    _reduction_ in functionality and its usage is not encouraged.  It is
  979. X    provided for those who wish to "invisibly" replace UCB mail with mush.
  980. X
  981. X    There is a Gnurc file, also supplied as an example, which can aid in
  982. X    making mush's curses mode appear similar to gnu-emacs (NOT Rmail).
  983. X
  984. X    The files sample.mushrc and advanced.mushrc are intended as samples of
  985. X    individual users' ~/.mushrc files.  There is some overlap from Mushrc
  986. X    in sample.mushrc; in particular, if you use Mushrc as the default file,
  987. X    the sample.mushrc need not source ~/.mailrc.
  988. X
  989. ---------------
  990. Help files:
  991. X    The help files should be placed somewhere which is readable and accessible
  992. X    by all.  Failing to do so removes virtually the entire help facility's
  993. X    ability to help anyone.  There is a help file (cmd_help) for command help
  994. X    (e.g. "command -?"), and the file tool_help is for the graphics mode (Sun
  995. X    workstations only).  You should define where you want these files in
  996. X    config.h so at runtime, they can be accessed without error.  If for some
  997. X    reason you can't define a location at run-time, you can change Mushrc
  998. X    to set the variables $cmd_help and $tool_help to the correct locations.
  999. X
  1000. ---------------
  1001. X
  1002. You should now be able to run make.  You may wish to use the target "install"
  1003. to put the mush binary and the help and init files in their proper places; be
  1004. sure to correct the destination directories in the Makefile you have selected,
  1005. and to doublecheck file path names in the init files.
  1006. X
  1007. ---------------
  1008. Maintenance:
  1009. X
  1010. If you want to use dbx or any other debugger, or to use your default tty
  1011. driver, -e should be used as command line argument when you run the program.
  1012. What this flag does is prevents your echo from being turned off and leaving
  1013. cbreak off, thus, keeping your tty in a sane state.  This prevents the use
  1014. of mappings and macros (map and map!).  However, curses mode will automatic-
  1015. ally disable that mode.  The -e flag is highly discouraged.
  1016. X
  1017. If you have memory allocation checking and validation (sun 3.0+ ?) then
  1018. define M_DEBUG in the makefile (main.c) and add the library
  1019. /usr/lib/debug/malloc.o to the library list. Do this only if you
  1020. find bugs in the program and suspect memory allocation errors. main.c
  1021. has the code which sets the debugging level according to the value of
  1022. an environment variable.  Because malloc-debugging is so cpu intensive,
  1023. the tool mode program may get a SIGXCPU (cpu time limit exceeded)
  1024. because of the large amount of opening and closing large pixrects and
  1025. devices.  For this reason, SIGXPCPU is is caught in main.c.
  1026. X
  1027. The "warning" variable may be set (at runtime in your .mushrc or as
  1028. a command: "set warning") to aid in finding runtime errors that aren't
  1029. fatal.  You can also use the "debug" command:
  1030. X    debug 1    --    general trace messages
  1031. X    debug 3    --    verbose messages, MTA disabled
  1032. X    debug 4    --    really verbose messages
  1033. X    debug 5    --    free() disabled
  1034. X
  1035. If you ever get "Message N has bad date: <date string>" then note
  1036. the FORMAT of that date and edit dates.c.  There are a number of
  1037. "sscanf"s which you can see match known date formats.  Use them as
  1038. examples and insert the new date format you have.
  1039. X
  1040. If Mush ever coredumps and you are suspicious about whether or not
  1041. your folder (or spool directory) was removed, or if you were editing
  1042. a letter, you should check for the files .mushXXXXXX and .edXXXXXXX.
  1043. Unless something incredibly awful has happened, Mush won't die without
  1044. asking if you want to save the .mushXXXXX file and if you actually want
  1045. it to dump core.  Note that if you run mush from .suntools and there is
  1046. a core dump, it probably wants to do some IO with the console and may
  1047. hang (not exit) because it doesn't know it can't talk to you.  If mush
  1048. is killed by SIGHUP, it won't remove the .mushXXXXXX file, but it won't
  1049. tell you about it either (unfortunately).
  1050. X
  1051. Bare-bones line-mode mush (no CURSES) and tool mode (SUNTOOL) pass lint
  1052. with a small number of errors, mostly about long assignments losing accuracy.
  1053. The SysV code has not been linted as thoroughly as the rest.  Curses doesn't
  1054. lint very well, but even when you lint mush with CURSES defined, it mainly
  1055. complains about the unused curses globals in curses.h.
  1056. SHAR_EOF
  1057. chmod 0644 README ||
  1058. echo 'restore of README failed'
  1059. Wc_c="`wc -c < 'README'`"
  1060. test 28505 -eq "$Wc_c" ||
  1061.     echo 'README: original size 28505, current size' "$Wc_c"
  1062. rm -f _shar_wnt_.tmp
  1063. fi
  1064. # ============= README-7.0 ==============
  1065. if test -f 'README-7.0' -a X"$1" != X"-c"; then
  1066.     echo 'x - skipping README-7.0 (File already exists)'
  1067.     rm -f _shar_wnt_.tmp
  1068. else
  1069. > _shar_wnt_.tmp
  1070. echo 'x - extracting README-7.0 (Text)'
  1071. sed 's/^X//' << 'SHAR_EOF' > 'README-7.0' &&
  1072. X
  1073. This is the official release of the Mush port to SunView, referred to in
  1074. alpha and beta versions as "mushview".  This file describes most of the
  1075. changes from revision 6.5.6 of "mush" and "mushtool".  Sorry, IBM, we
  1076. never managed to get the DOS code integrated.  Note that this is version
  1077. 7.0.0, not to be confused (we hope) with alpha-test releases that had a
  1078. third zero appended to the number.  Check the dates if you aren't sure.
  1079. X
  1080. Thanks up front to Rich Burridge of Sun Australia for his work on
  1081. converting mush's SunWindows code to SunView, and for giving mush a really
  1082. thorough linting, which it had needed for some time.  Thanks also to the
  1083. many alpha and beta testers who sent valuable comments.
  1084. X
  1085. Version 7.0.0 differs from the several 6.5.6 Beta releases in that a
  1086. large portion of the Sun code has changed to use text subwindows instead
  1087. of pixrects.  This is a significant enough change in "look and feel" that
  1088. the release number was increased from 6 to 7.  Addition of file completion
  1089. to the line/curses modes is also considered a major improvement, as are
  1090. changes to the "mail" command (described below).
  1091. X
  1092. Tool mode changes include:
  1093. X    * The message display window is a textsw, with scrollbars.
  1094. X    * The composition window is also a textsw, and opens in a separate
  1095. X      frame, so you can read messages in the main frame while composing.
  1096. X      You can still invoke an editor, and the default window size is
  1097. X      such that vi no longer gets confused (as far as we can tell).
  1098. X    * There are variables to control the sizes of most subwindows.
  1099. X    * Header-editing works in tool mode (in fact, you MUST use it).
  1100. X    * Help, options, and alias settings also pop up in their own frames.
  1101. X      The help descriptions have been improved (we believe).
  1102. X    * Interactive function-key binding is no longer supported; the clash
  1103. X      of mush function keys with SunView functions has been eliminated.
  1104. X    * The list of folders in your folder directory is made into a
  1105. X      walking menu.  (Handling of this may improve in future patches.)
  1106. X
  1107. In addition to the SunView conversions and linting, which make up the bulk
  1108. of the changes, there have been a number of bug fixes and enhancements to
  1109. the 6.5.6 baseline.  These include:
  1110. X
  1111. mush -h file
  1112. mush -U -h file
  1113. mush -U! -h file
  1114. X    The new -h (-draft) options allows mush to read in a prepared message
  1115. X    for sending, in the same manner as Rnmail.  The specified file must
  1116. X    contain the message headers (either when first read or after editing
  1117. X    by the user); mush will not add headers to it.  The intended use of
  1118. X    this option is to write a partially finished message to a file and
  1119. X    then return to it later.  (See commentary below on "mail -h".)  The
  1120. X    new -U (-send) option allows the draft file to be sent immediately
  1121. X    without editing (-U means "unedited").  Signatures and fortunes are
  1122. X    not appended when -U! is used ("unsigned" as well as unedited).
  1123. X
  1124. mush -I file
  1125. mush -I! file
  1126. X    The new -I (-init) option allows the user to specify an init file that
  1127. X    is read before any of the other init files.  -I! causes the specified
  1128. X    file to replace the system Mushrc file; otherwise, the given file and
  1129. X    the system Mushrc are both read.  -I has no effect on reading of the
  1130. X    user's own $HOME/.mushrc file (except that the indicated file could
  1131. X    "setenv MAILRC", thus changing the location of the user's file).
  1132. X
  1133. mush -n
  1134. mush -n!
  1135. X    The first form of this option now works like the ucbMail -n option,
  1136. X    that is, it prevents sourcing of the system Mushrc but the user's own
  1137. X    $HOME/.mushrc is still read.  The new -n! variation prevents either
  1138. X    file from being sourced, which was the old behavior of -n.  Using -n
  1139. X    does not change the effect of -I, so the following are equivalent:
  1140. X        mush -n -I file            mush -I! file
  1141. X
  1142. cd
  1143. X    The cdpath variable now works correctly when specified with either
  1144. X    colons or spaces separating the list of directories.
  1145. X
  1146. help
  1147. X    The help facility has been expanded; there is now a help file entry
  1148. X    consisting of a usage line and short explanation for every documented
  1149. X    line-mode command except "debug" and "version", all accessible via
  1150. X    "? command" or "command -?".  In addition, there are variables:
  1151. X    set cmd_help = path    Give new location for cmd_help file
  1152. X    set tool_help = path    Give new location for tool_help file
  1153. X    These variables, which can be set in the system or user init files,
  1154. X    have replaced the old -1 and -2 startup options, i.e. cmd_help and
  1155. X    tool_help can no longer be specified on the mush command line.
  1156. X
  1157. mail -E
  1158. mail -h file
  1159. mail -H file
  1160. mail -I
  1161. mail -u
  1162. mail -U -h file
  1163. X    The new "-h file" option of the mail command corresponds to the -h
  1164. X    option of mush itself, and is intended for reading in previously
  1165. X    begun letters.  It implies -E (edit_hdrs).  The previous meaning of
  1166. X    -h (include and indent a message with its headers) is now supported
  1167. X    by the -I option, corresponding to the ~I escape (see below).  The
  1168. X    -H option is analogous to -h, except that the file need not contain
  1169. X    message headers (edit_hdrs is not implied).  (Some alpha versions
  1170. X    used -H for the function now supplied by -I.)
  1171. X    The -E option no longer implies autoedit.
  1172. X    The new -u option turns off autosign and fortune.  Most useful
  1173. X    with "-h file" when you want to continue editing the draft but a
  1174. X    signature or fortune has already been appended; but -h is not
  1175. X    required for -u.  The new -U option sends the file immediately; it
  1176. X    cannot be used without -h or -H, and will be ignored if no To:
  1177. X    address has been specified.
  1178. X    Also, the user is no longer required to provide a To: address in
  1179. X    order to begin composing a letter (one is still required before
  1180. X    sending it), and the To: address may be only files and/or pipes if
  1181. X    desired (in which case the MTA is not run).
  1182. SHAR_EOF
  1183. true || echo 'restore of README-7.0 failed'
  1184. fi
  1185. echo 'End of  part 1'
  1186. echo 'File README-7.0 is continued in part 2'
  1187. echo 2 > _shar_seq_.tmp
  1188. exit 0
  1189. exit 0 # Just in case...
  1190. -- 
  1191. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1192. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1193. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1194. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1195.